package section4_7;

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Created by Hyman on 2017/6/8.
 *
 * 在执行器中延时执行任务
 *
 * 从结果可知，每隔1秒钟就有一个任务开始执行；这是因为所有的任务被同时发送到执行器，但每个任务都比前一个任务延迟了1秒钟
 */
public class Main {

    public static void main(String[] args) {

        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

        // 使用ScheduledThreadPoolExecutor实例的schedule()方法，初始化和开始一些任务（5个任务）。
        System.out.printf("Main: Starting at: %s\n", new Date());

        for (int i = 0; i < 5; i++) {
            Task task = new Task("Task " + i);
            executorService.schedule(task, i + 1, TimeUnit.SECONDS);
        }

        // 关闭线程执行器对象
        executorService.shutdown();

        try {
            // 所有线程必须在24小时内完成，否则就终止未完成的线程
            executorService.awaitTermination(1, TimeUnit.DAYS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 输出完成消息
        System.out.printf("Core: Ends at: %s\n", new Date());
    }

}
